package com.xoa.service.modulePriv.impl;

import com.xoa.dao.modulePriv.ModulePrivMapper;
import com.xoa.dao.users.UsersMapper;
import com.xoa.model.modulePriv.ModulePriv;
import com.xoa.model.users.Users;
import com.xoa.service.modulePriv.ModulePrivService;
import com.xoa.util.ToJson;
import com.xoa.util.common.L;
import com.xoa.util.common.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 创建作者:   张航宁
 * 创建日期:   2017-07-05
 * 类介绍  :   用户权限接口实现类
 * 构造参数:   无
 */
@Service
public class ModulePrivServiceImpl implements ModulePrivService {

    @Resource
    private ModulePrivMapper modulePrivMapper;
    @Resource
    private UsersMapper usersMapper;

    /**
     * 创建作者:   张航宁
     * 创建日期:   2017年7月6日
     * 方法介绍:   保存方法
     *
     * @return ToJson<ModulePriv>
     */
    @Override
    @Transactional
    public ToJson<ModulePriv> saveModulePriv(ModulePriv modulePriv, String applyModules, String applyDepts, String applyPrivs) {
        ToJson json = new ToJson();
        try {
            // 判断范围是否为空 任意一项为空 就为不限制权限
            if (modulePriv.getDeptId() == null || modulePriv.getPrivId() == null) {
                modulePrivMapper.deleteModulePriv(modulePriv);
                // 判断是否应用到其他模块中
                if (!StringUtils.checkNull(applyModules)) {
                    String[] moduleIds = applyModules.split(",");
                    for (String moduleId : moduleIds) {
                        modulePriv.setModuleId(Integer.valueOf(moduleId));
                        modulePrivMapper.deleteModulePriv(modulePriv);
                    }
                }
                // 判断是否将此模块的权限应用到其他的用户上
                if (!StringUtils.checkNull(applyDepts) && !StringUtils.checkNull(applyPrivs)) {
                    String[] deptIds = applyDepts.split(",");
                    String[] privIds = applyPrivs.split(",");
                    List<Users> usersByDeptAndPriv = usersMapper.getUsersByDeptAndPriv(deptIds, privIds);
                    if (usersByDeptAndPriv != null && usersByDeptAndPriv.size() > 0) {
                        StringBuffer sb = new StringBuffer();
                        for (Users entity : usersByDeptAndPriv) {
                            sb.append(entity.getUid() + ",");
                        }
                        modulePrivMapper.deleteModulePrivs(sb.toString().split(","), modulePriv.getModuleId());
                    }
                }
            } else {
                ModulePriv modulePrivSingle = modulePrivMapper.getModulePrivSingle(modulePriv);
                if (modulePrivSingle != null) {
                    modulePrivMapper.updateModulePriv(modulePriv);
                } else {
                    modulePrivMapper.addModulePriv(modulePriv);
                }
                // 判断是否应用到其他模块中
                if (!StringUtils.checkNull(applyModules)) {
                    String[] moduleIds = applyModules.split(",");
                    for (String moduleId : moduleIds) {
                        modulePriv.setModuleId(Integer.valueOf(moduleId));
                        ModulePriv modulePrivSingle2 = modulePrivMapper.getModulePrivSingle(modulePriv);
                        if (modulePrivSingle2 != null) {
                            modulePrivMapper.updateModulePriv(modulePriv);
                        } else {
                            modulePrivMapper.addModulePriv(modulePriv);
                        }
                    }
                }
                // 判断是否将此模块的权限应用到其他的用户上
                if (!StringUtils.checkNull(applyDepts) && !StringUtils.checkNull(applyPrivs)) {
                    String[] deptIds = applyDepts.split(",");
                    String[] privIds = applyPrivs.split(",");
                    List<Users> usersByDeptAndPriv = usersMapper.getUsersByDeptAndPriv(deptIds, privIds);
                    for (Users entity : usersByDeptAndPriv) {
                        modulePriv.setUid(entity.getUid());
                        ModulePriv modulePrivSingle3 = modulePrivMapper.getModulePrivSingle(modulePriv);
                        if (modulePrivSingle3 != null) {
                            modulePrivMapper.updateModulePriv(modulePriv);
                        } else {
                            modulePrivMapper.addModulePriv(modulePriv);
                        }
                    }
                }
            }
            json.setMsg("ok");
            json.setFlag(0);
        } catch (Exception e) {
            e.printStackTrace();
            json.setMsg("err");
            json.setFlag(1);
        }
        return json;
    }

    /**
     * 创建作者:   张航宁
     * 创建日期:   2017年7月6日
     * 方法介绍:   更新方法
     *
     * @return ToJson<ModulePriv>
     */
    @Override
    @Transactional
    public ToJson<ModulePriv> updateModulePriv(ModulePriv modulePriv) {
        ToJson json = new ToJson();
        try {
            if (modulePriv.getDeptId() == null || modulePriv.getPrivId() == null) {
                modulePrivMapper.deleteModulePriv(modulePriv);
                json.setMsg("ok");
                json.setFlag(0);
            } else {
                modulePrivMapper.updateModulePriv(modulePriv);
                json.setMsg("ok");
                json.setFlag(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
            json.setMsg("err");
            json.setFlag(1);
            L.e("ModulePrivServiceImpl updateModulePriv:" + e);
        }
        return json;
    }

    /**
     * 创建作者:   张航宁
     * 创建日期:   2017年7月6日
     * 方法介绍:   根据uid删除
     *
     * @return ToJson<ModulePriv>
     */
    @Override
    public ToJson<ModulePriv> deleteModulePriv(ModulePriv modulePriv) {
        ToJson json = new ToJson();
        try {
            modulePrivMapper.deleteModulePriv(modulePriv);
            json.setMsg("ok");
            json.setFlag(0);
        } catch (Exception e) {
            e.printStackTrace();
            json.setMsg("err");
            json.setFlag(1);
        }
        return json;
    }

    /**
     * 创建作者:   张航宁
     * 创建日期:   2017年7月6日
     * 方法介绍:   根据uid和moduleid查询单个实体
     *
     * @return ToJson<ModulePriv>
     */
    @Override
    public ToJson<ModulePriv> getModulePrivSingle(ModulePriv modulePriv) {
        ToJson<ModulePriv> json = new ToJson<ModulePriv>();
        try {
            ModulePriv modulePrivByUid = modulePrivMapper.getModulePrivSingle(modulePriv);
            json.setObject(modulePrivByUid);
            json.setFlag(0);
            json.setMsg("ok");
        } catch (Exception e) {
            e.printStackTrace();
            json.setFlag(1);
            json.setMsg("err");
        }
        return json;
    }


}
